package com.bjtu.ptsite.utils;

import com.turn.ttorrent.bcodec.BEValue;
import com.turn.ttorrent.bcodec.BDecoder;
import com.turn.ttorrent.common.Torrent;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import java.util.Map;

public class TorrentUtils {

    public static String getInfoHash(Torrent torrent) {
        return torrent.getHexInfoHash();
    }

    public static long getTotalSize(Torrent torrent) {
        return torrent.getSize(); // 返回所有文件总大小
    }

    /**
     * 解析 .torrent 文件，返回 info 字典
     */
    public static Map<String, BEValue> getInfoDict(File torrentFile) throws Exception {
        try (FileInputStream fis = new FileInputStream(torrentFile)) {
            BEValue torrentValue = BDecoder.bdecode(fis);
            Map<String, BEValue> torrentMap = torrentValue.getMap();
            return torrentMap.get("info").getMap();
        }
    }


    /**
     * 计算种子包含的文件数量
     */
    public static int getFileCount(File torrentFile) throws Exception {
        Map<String, BEValue> info = getInfoDict(torrentFile);
        if (info.containsKey("files")) {
            // 多文件模式
            List<BEValue> files = info.get("files").getList();
            return files.size();
        } else if (info.containsKey("length")) {
            // 单文件模式
            return 1;
        }
        return 0;
    }

    public static Torrent parseTorrent(File torrentFile) throws Exception {
        try (FileInputStream fis = new FileInputStream(torrentFile)) {
            return Torrent.load(torrentFile);
        }catch (Exception e) {
            return null;
        }

    }
}
